
package Controlador;

import Modelo.Listas;
import Modelo.Clientes;
import Modelo.Vigilantes;
import Vista.JFrameClientes;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.AWTEventListener;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class ControladorClientes implements ActionListener, KeyListener
{
  private JFrameClientes formClientes;
  private Listas LisCli;
 
    public ControladorClientes(Listas LisEmpresa) 
    {
        
        LisCli=LisEmpresa;  
       formClientes=new JFrameClientes();
       formClientes.agregarListener(this);
       formClientes.setVisible(true);
       Enabled(false);
       
       //**********************************
      formClientes.getTxtCedulaCliente().addKeyListener(new KeyAdapter()              
      {        
            @Override
            public void keyTyped (KeyEvent e)
              {    
                CedulaClientekeyTyped(e);
              }
                 
            @Override
            public void keyPressed(KeyEvent e) 
               {
                  CedulaClientekeyPressed(e); 
               }  
            
            
       }
    );  
           
       formClientes.getTxtNombreCliente().addKeyListener(new KeyAdapter()              
      {        
            @Override
            public void keyTyped (KeyEvent e)
              {    
               
                NombreClientekeyTyped(e);
              }      
            
       });
       
       formClientes.getTxtResponsable().addKeyListener(new KeyAdapter()              
      {        
            @Override
            public void keyTyped (KeyEvent e)
              {    
               
                ResponsableClientekeyTyped(e);
              }      
            
       });
       
       formClientes.getTxtTelefonoCliente().addKeyListener(new KeyAdapter()              
      {        
            @Override
            public void keyTyped (KeyEvent e)
              {    
               
                TelefonoClientekeyTyped(e);
              }      
            
       });
       //**********************************
    }
    
//--------------------------------
private void CedulaClientekeyTyped(KeyEvent e)    
{
   String Cadena;
   char Caracter;
   
   Cadena=formClientes.getTxtCedulaCliente().getText();
   
   if (Cadena.length()==8)
   {
     e.consume();
     return;
   }   
   
   Caracter=e.getKeyChar();
   if (Caracter<'0' || Caracter > '9')
     e.consume();  
   
   
   
}        
//--------------------------------
private void CedulaClientekeyPressed(KeyEvent e)
{
    String Cadena;
    int PosiCliente;
    Clientes cliente;
    int Opcion;
    
   Cadena=formClientes.getTxtCedulaCliente().getText(); 
   if (e.getKeyChar()==10 && Cadena.length() > 0) 
    {
      Enabled(true);   
      
      PosiCliente=LisCli.ExisteCliente(Cadena);
      if (PosiCliente==-1)
       {
         formClientes.getTxtNombreCliente().requestFocusInWindow();
          return;
       }  
      
      if (PosiCliente >=0)
       {
         cliente=LisCli.getListaClientes().get(PosiCliente);

         formClientes.getTxtNombreCliente().setText(cliente.getNombre());
         //formClientes.getComboTipo().sett
         formClientes.getTxtDireccionCliente().setText(cliente.getDireccion());
         formClientes.getTxtTelefonoCliente().setText(cliente.getTelefono());
         formClientes.getTxtResponsable().setText(cliente.getNombreResponsable());
         
         Opcion=Mensajes.Opciones("Modificar", "Eliminar", "Salir");
         switch (Opcion)
          {
             case 0:formClientes.getTxtNombreCliente().requestFocusInWindow();
                    break;
                 
             case 1:Mensajes.Aviso("No Implementado", "Aviso");    
                    Limpiar();
                    Enabled(false);
                    break;
                 
             case 2:Limpiar();
                    Enabled(false);
                    break;
   
          }   
         
       }  
    }  
} 
  
//--------------------------------
private void NombreClientekeyTyped(KeyEvent e)    
{
   String Cadena;
   char Caracter;
   String CaracterEsp;
   
   Cadena=formClientes.getTxtNombreCliente().getText();
   
   if (Cadena.length()==25)
   {
     e.consume();
     return;
   }   
   
   Caracter=e.getKeyChar();
   
   if (Caracter==' ')
       return;
   
   if ((Caracter <'A' || Caracter > 'Z') && (Caracter<'a' || Caracter > 'z'))
       e.consume();  
   
}        

//-------------------------
private void ResponsableClientekeyTyped(KeyEvent e)    
{
   String Cadena;
   char Caracter;
   String CaracterEsp;
   
   Cadena=formClientes.getTxtResponsable().getText();
   
   if (Cadena.length()==25)
   {
     e.consume();
     return;
   }   
   
   Caracter=e.getKeyChar();
   
   if (Caracter==' ')
       return;
   
   if ((Caracter <'A' || Caracter > 'Z') && (Caracter<'a' || Caracter > 'z'))
       e.consume();  
   
}         
//-------------------------
private void TelefonoClientekeyTyped(KeyEvent e)    
{
   String Cadena;
   char Caracter;
   
   Cadena=formClientes.getTxtTelefonoCliente().getText();
   
   if (Cadena.length()==11)
   {
     e.consume();
     return;
   }   
   
   Caracter=e.getKeyChar();
   if (Caracter<'0' || Caracter > '9')
     e.consume();  
   
   
   
}        
//--------------------------------

public void Limpiar()
{
    formClientes.getTxtCedulaCliente().setText("");
    formClientes.getTxtDireccionCliente().setText("");
    formClientes.getTxtNombreCliente().setText("");
    formClientes.getTxtResponsable().setText("");
    formClientes.getTxtTelefonoCliente().setText("");
    //formClientes.getComboTipo()
 }

private void Enabled(boolean status)
{
    formClientes.getTxtCedulaCliente().setEnabled(!status); 
    formClientes.getTxtDireccionCliente().setEnabled(status);
    formClientes.getTxtNombreCliente().setEnabled(status); 
    formClientes.getTxtResponsable().setEnabled(status);
    formClientes.getTxtTelefonoCliente().setEnabled(status);
}        


//-------------------------
private void Grabar()
{
     String Cadena;
     Clientes cliente=new Clientes();
     String Tipo;
     String Respon;
     
     Cadena=formClientes.getTxtCedulaCliente().getText();
     if (Cadena.length()==0)
     {  
       Mensajes.Aviso("Cedula Vacía", "");  
       formClientes.getTxtCedulaCliente().requestFocusInWindow();
       return;
     }  
     
     Cadena=formClientes.getTxtNombreCliente().getText();
     if (Cadena.length()==0)
       {  
         Mensajes.Aviso("Nombre Vacío", "");  
         formClientes.getTxtNombreCliente().requestFocusInWindow();
         return;
       }
     

      Cadena=formClientes.getTxtDireccionCliente().getText();
      if (Cadena.length()==0)
       {  
         Mensajes.Aviso("Direccion Vacía ", "");  
         formClientes.getTxtDireccionCliente().requestFocusInWindow();
         return;
       }

      Cadena=formClientes.getTxtTelefonoCliente().getText();
      Cadena=Cadena.trim();
      
      if (Cadena.length()==0)
       {  
         Mensajes.Aviso("Teléfono Vacío ", "");  
         formClientes.getTxtTelefonoCliente().requestFocusInWindow();
         return;
       }
      
       Cadena=formClientes.getTxtResponsable().getText();
       if (Cadena.length()==0)
       {  
         Mensajes.Aviso("Nombre del Responsable Vacío", "");  
         formClientes.getTxtResponsable().requestFocusInWindow();
         return;
       }
      
      Tipo=(String) formClientes.getComboTipo().getSelectedItem();
      Respon=(String) formClientes.getComboResponsable().getSelectedItem();
      
      
      
      cliente.Clientes(formClientes.getTxtCedulaCliente().getText(),
                        formClientes.getTxtNombreCliente().getText(),
                        Tipo,
                        formClientes.getTxtDireccionCliente().getText(),
                        formClientes.getTxtTelefonoCliente().getText(),
                        Respon,
                        formClientes.getTxtResponsable().getText());           
      

      Cadena=formClientes.getTxtCedulaCliente().getText();

      int PosiCli;
              
      PosiCli =LisCli.ExisteCliente(Cadena);
      
      if (PosiCli==-1)      
        LisCli.getListaClientes().add(cliente);
      else
        LisCli.getListaClientes().set(PosiCli, cliente);
      
      Limpiar();
      //Enabled(false);
      }    


  //-------------------------------------------------
    //Botones
    @Override
    public void actionPerformed(ActionEvent e) 
    {
       if (e.getSource().equals(formClientes.getBtnSalir()))
       {
           formClientes.dispose();
           return;
       }
                
       if (e.getSource().equals(formClientes.getBtnConsulta()))
       {
          new ControladorConsulCliente(LisCli); 
          return;
       }   
       
       if (e.getSource().equals(formClientes.getBtnCancelar()))
       {
           Limpiar();
           Enabled(false);
           formClientes.getTxtCedulaCliente().requestFocusInWindow();
           return;
       }
       
           if (e.getSource().equals(formClientes.getBtnGrabar()))
       {
           Grabar();
           Enabled(false);
           formClientes.getTxtCedulaCliente().requestFocusInWindow();
       }
       
       
    }

    @Override
    public void keyTyped(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void keyPressed(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void keyReleased(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
  
  
}
